<?php
/**
 * TUser - Passerelle vers la table user
 * 
 * @package application
 * @subpackage models
 */
class TUser extends Zend_Db_Table_Abstract
{
    /**
     * Nom de la table
     * 
     * @var string
     */
    protected $_name = 'user';
    
    /**
     * Nom de la clé primaire
     *
     * @var string
     */
    protected $_primary = 'id';
    
    /**
     * Nom de la classe des enregistrements
     *
     * @var string
     */
    protected $_rowClass = 'Zfbook_Db_Table_Row';
    
    /**
     * Nom de la classe des jeux d'enregistrements
     *
     * @var string
     */
    protected $_rowsetClass = 'Zfbook_Db_Table_Rowset';
    
    /**
     * Est-ce qu'un utilisateur donné est libre à la période demandée ?
     *
     * @param integer $userId
     * @param Zend_Date $debut
     * @param Zend_Date $fin
     * @return boolean
     */
    public function isAvailableAtPeriod($userId, Zend_Date $debut, Zend_Date $fin)
    {
        $select = $this->_db->select();
        $select->from(array('r'=>'reservation'),'id_user')
               ->where("UNIX_TIMESTAMP(date_begin) BETWEEN {$debut->getTimestamp()} AND {$fin->getTimestamp()}")
               ->orWhere("UNIX_TIMESTAMP(date_end)  BETWEEN {$debut->getTimestamp()} AND {$fin->getTimestamp()}")
               ->orWhere($this->_db->quoteInto('UNIX_TIMESTAMP(date_end)<?', $debut->getTimestamp()))
               ->where('r.id_user = ?', (int) $userId, Zend_Db::INT_TYPE);
        return !$select->query()->rowCount();
    }
    
    /**
     * Combien de réservations a fait cet utilisateur ?
     *
     * @param integer $userId
     * @return integer
     */
    public function getReservationsCount($userId)
    {
        $select = $this->_db->select();
        $select->from(array('r'=>'reservation'),array('count'=>'COUNT(creator)'))
               ->where('creator=?', (int) $userId, Zend_Db::INT_TYPE);
        return (int) $this->_db->fetchOne($select);    
    }
}
